package com.zw.user.controller;/*
 *@program:b2c-cloud-store
 *@author:
 *@Time: 2022/11/21  18:43
 *@description: 用户控制类
 */

import com.zw.param.UserCheckParam;
import com.zw.param.UserLoginParam;
import com.zw.pojo.User;
import com.zw.user.service.UserService;
import com.zw.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    /**
     * 检查账号是否可用接口
     * @param userCheckParam  接收检查的账号实体，内部有参数校验注解
     * @param result 获取校验结果的实体对象
     * @return 返回封装结果R对象实体
     */
    @PostMapping("/check")
    public R check(@RequestBody @Validated UserCheckParam userCheckParam, BindingResult result){
        if(result.hasErrors()){
            return R.fail("参数异常，不可使用");
        }
        return userService.check(userCheckParam);
    }

    /**
     * 用户注册接口
     * @param user  接收用户注册参数实体类，内有参数校验注解
     * @param result 获取校验结果的实体对象
     * @return 结果 001(成功) 004(失败)
     */
    @PostMapping("/register")
    public R register(@RequestBody @Validated User user,BindingResult result){
        if(result.hasErrors()){
            return R.fail("参数异常，不可注册");
        }
        return userService.register(user);
    }

    /**
     * 用户登录接口
     * @param userLoginParam 接收用户登录实体对象，内有jsr 303校验注解校验
     * @param result 获取校验结果的实体对象
     * @return 结果 001  004
     */
    @PostMapping("/login")
    public R login(@RequestBody @Validated UserLoginParam userLoginParam,BindingResult result){
//        hasError 结果有异常则返回true,反之false
        if(result.hasErrors()){
            return R.fail("参数异常，不可登录");
        }
        return userService.login(userLoginParam);
    }
}
